import axios from 'axios'
import { getV4 } from '@/utils/auth.js'
import store from '@/store'
import router from '@/router'

const request = axios.create({
  // 公共请求地址
  baseURL: 'http://gmall-h5-api.atguigu.cn',
  // 超时时间
  timeout: 10000
})

// 定义请求拦截器
request.interceptors.request.use((config) => {
  // 给每一个请求携带一个userTempId
  config.headers.userTempId = getV4()
  // 如果有token值就携带
  const token = store.state.login.token
  if (token) {
    config.headers.token = token
  }
  // 返回config
  return config
})

// 定义响应拦截器
request.interceptors.response.use(
  // 成功
  async (res) => {
    const data = res.data
    if (data.code !== 200 && data.code !== 205) {
      alert('响应拦截器：' + data.message || '发生错误！')
      // 如果token失效时，code返回208
      if (data.code === 208) {
        console.log(208)
        // 退出用户登录
        await store.dispatch('login/logout')
        // 前往登录页
        router.push('/login?address=' + router.currentRoute.path)
      }
      return Promise.reject(new Error(data.message))
    } else {
      return res.data.data || res.data
    }
  },
  // 失败
  (err) => new Promise(new Error(err))
)

// 导出
// 封装post请求或者get请求，携带参数时都用data
export default ({ method, url, data }) => {
  return request({
    method,
    url,
    [method === 'post' ? 'data' : 'params']: data
  })
}
